/*
 * @lc app=leetcode.cn id=1178 lang=cpp
 *
 * [1178] 猜字谜
 */

// @lc code=start
class Solution {
public:
    //**************************************************超时**************************
    // bool findNum(string words,string puzzles)
    // {
    //     unordered_map<char,int> need,window;
    //     for(char c : words)
    //         need[c] = 1;
    //     /*
    //     int flag = 0;                           // 用于判断是否满足条件一
    //     for(char c : words)
    //     {
    //         if(c == puzzles[0])
    //         {
    //             flag = 1;
    //         }
    //         need[c] = 1;
    //     }

    //     if(flag == 0)
    //     {
    //         //不满足条件一
    //         return false;
    //     }
    //     */
    //     int right = 0;
    //     int vaild = 0;
    //     while(right<puzzles.size())
    //     {
    //         //右侧的数据
    //         char c = puzzles[right];

    //         //右移
    //         right++;

    //         //更新
    //         if(need.count(c))
    //         {
    //             if(window[c] == 0)
    //             {
    //                 vaild++;
    //             }
    //             window[c] = 1;
    //         }

    //         //
    //         if(vaild == need.size())
    //         {
    //             return true;
    //         }
    //     }
    //     return false;
    // }

    // vector<int> findNumOfValidWords(vector<string>& words, vector<string>& puzzles) {
    //     vector<int> res(puzzles.size());
    //     for(auto i = 0 ; i < puzzles.size() ; i++)
    //     {
    //         for(auto j = 0 ; j < words.size() ; j++)           
    //         {
    //             int flag = 0;
    //             for(char c : words[j])
    //             {
    //                 if(c == puzzles[i].at(0))
    //                 {
    //                     flag = 1;
    //                     break;
    //                 }
    //             }    
    //             if(flag == 0)
    //             {
    //                 continue;
    //             }else
    //             {
    //                 if(findNum(words[j],puzzles[i]) == true)
    //                 {
    //                    res[i]++;
    //                 }
    //             }
    //         }
    //     }
    //     return res;
    // }
    //**************************************************


    ///*******************************************************************标准答案
    // vector<int> findNumOfValidWords(vector<string>& words, vector<string>& puzzles) {
    //     unordered_map<int,int> mp;
    //     for (auto word : words) {
    //         int cur = 0;
    //         for (char c : word) {
    //             cur = cur | 1 << (c - 'a');
    //         }
    //         mp[cur]++;
    //     }
    //     vector<int> res(puzzles.size());
    //     int bound = 1 << 7; 
    //     int k = 0;
    //     for (auto p : puzzles) {
    //         for (int mask = 1 << 6; mask < bound; mask++) {
    //             string word; 
    //             int number = 0;
    //             for (int i = 0; i <= 6; i++) {
    //                 if (mask & (1 << i)) number = number | (1 << (p[6 - i] - 'a'));
    //             }
    //             res[k] += mp[number];
    //         }
    //         k++;
    //     }
    //     return res;
    // }



    ///*******************************************************************


};
// @lc code=end

